package com.charging.business.qin;

import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * @author JerryLu
 * @date 2024/11/28 20:11
 * @description 陕西车辆特情在线计费响应接口
 */
@Data
public class QinOnLineResponse {
    /** 请求ID */
    @JSONField(ordinal = 0)
    public String responseId;

    /**
     * 计费支撑
     * 1-省中心云平台支撑计费（省内计费请求响应时，当以在途车或卡内点位为基础拟合返回的各点为支撑计费，则返回1）
     * 2-部中心云平台支撑计费；
     * 8-省中心云平台兜底计费；
     * 9-省中心云平台依据部中心返回单省通行计费；
     */
    @JSONField(ordinal = 1)
    public Integer tollSupport;

    /**
     * 省内路径拟合标记
     * 计费支撑为1时，即省内计费响应时，有效；
     * 0：不含拟合点（默认）；
     * 1：含有拟合点；
     */
    @JSONField(ordinal = 2)
    public Integer fittingSign;

    /**
     * 返回类型
     * 0：正常返回
     * 1：无数据返回；
     * 9：超时无响应；
     * 10：请求返回失败；
     * 11：返回入口成功，计费失败；
     */
    @JSONField(ordinal = 3)
    public Integer returnType;

    /**
     * 特情计费结果
     * 请求类型为11时，返回定义为：
     * 1：特情计费成功
     * 2：入口站有误-路径不可达
     * 3：路径信息不可拟合 -请使用其他拟合方式
     * 4：拟合超时-请使用其他拟合方式
     * 5：非跨省通行
     * 请求类型为12时，返回定义为：
     * 11：有入口信息；
     * 12：无入口信息；
     * 请求类型为10时，返回定义为：；
     * 21：有入口信息，特情计费
     * 22：有入口信息，入口站有误-路径不可达；
     * 23：有入口信息，路径信息不可拟合；
     * 24：有入口信息，拟合超时；
     * 25：有入口信息，非跨省通行；
     * 26：无入口信息，返回失败
     */
    @JSONField(ordinal = 4)
    public Integer calculateResult;

    /**
     * 出口通行介质类型
     */
    @JSONField(ordinal = 5)
    public Integer mediaType;

    /**
     * CPC卡内读取的省内交易金额累计
     * 请求类型为10、11，且为本省单省通行时，必填；
     */
    @JSONField(ordinal = 6)
    public String mediaNo;

    /**
     * 入口收费站编号
     * 请求类型为10、12时，必填；
     */
    @JSONField(ordinal = 7)
    public String enStationId;

    /**
     * 入口车道编号
     * 必填：是
     * 1-OBU
     * 2-CPC 卡
     * 3-纸券
     * 9-无通行介质
     */
    @JSONField(ordinal = 8)
    public String enTollLaneId;

    /**
     * 通行介质编码
     * CPC卡16位；
     * 无介质通行为030；
     * 纸券，为01+纸券标识(不超过20位)；
     * ETC卡号 20位（通行介质为OBU时，填写ETC卡号）；
     */
    @JSONField(ordinal = 9)
    @JsonFormat(pattern = "yyyy-MM-ddTHH:mm:ss")
    public String enTime;

    /**
     * 结果凭证
     * 请求类型为10、12时，必填；
     * 请求部中心返回入口收费站列表时，多个收费站结果凭证之间用”|”分隔；
     */
    @JSONField(ordinal = 10)
    public String resultVoucher;

    /**
     * 应收金额
     * 请求类型为10、11时，必填；
     */
    @JSONField(ordinal = 11)
    public Integer payFee;

    /**
     * 总交易金额
     * 请求类型为10、11时，必填,
     */
    @JSONField(ordinal = 12)
    public Integer fee;

    /**
     * 优惠金额
     * 请求类型为10、11时，必填,
     */
    @JSONField(ordinal = 13)
    public Integer discountFee;

    /**
     * 总拆分金额
     * 单位：分。拆分总金额累计，用于现场收费
     * 请求类型为10、11时，必填
     */
    @JSONField(ordinal = 14)
    public Integer splitAmount;

    /**
     * 总里程，里程总数累计
     * 请求类型为10、11时，必填
     */
    @JSONField(ordinal = 15)
    public Integer feeMileage;

    /**
     * 是否折扣
     */
    @JSONField(ordinal = 16)
    public Integer isDiscount;

    /**
     * 计费明细信息
     * 11.出口车道特情计费请求成功返回时，必填；
     */
    @JSONField(ordinal = 17)
    public List<TollDetail> tollDetail = new ArrayList<>();
}
